Repository navigation
feat(ui): responsive layouts and unified platform UI kit - #401
Merged
Merged
Conversation
TThanos3000
marked this pull request as ready for review
October 4, 2026 18:52
10 of 11 tasks
TThanos3000
added a commit
that referenced
this pull request
Oct 5, 2026
…sition fix(ui): восстановить desktop до #401 и сохранить mobile/tablet
15 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
После responsive-адаптации одинаковые элементы платформы использовали отдельные реализации и локальные цвета, размеры и состояния. Общий UI Kit теперь задаёт кнопки и поля от 44 px, типографику, карточки, вкладки, диалоги, сообщения и заголовки страниц. Например, loading сохраняет название действия и блокирует повторную отправку; короткие подписи и CTA в карточках помещаются на mobile и desktop.
База PR:
devна момент создания PR —9acb7ce2. Включены предыдущий responsive-коммитbc4940c5, UI Kit74a94c9bи финальные проверки. Скриншоты «до» показывают responsive baseline, «после» — UI Kit. Предыдущий этап описан в responsive README.Компоненты
@uilib; старые импорты реэкспортируют тот же класс. Native ButtonDirective использует тот же foundation, сохраняя form/ARIA/HTMLElement refs.Переведены 80 HTML-шаблонов; удалены 6 дублирующих HTML/SCSS. Аудит подтверждает 10 канонических компонентов и отсутствие локальных hex/rgb/hsl цветов в component SCSS. Полные списки и правила: UI-KIT.md, audit.json, REPORT.md.
Все 80 переведённых HTML-шаблонов
projects/social_platform/src/app/ui/pages/auth/email-verification/email-verification.component.htmlprojects/social_platform/src/app/ui/pages/auth/login/login.component.htmlprojects/social_platform/src/app/ui/pages/auth/register/register.component.htmlprojects/social_platform/src/app/ui/pages/auth/reset-password/reset-password.component.htmlprojects/social_platform/src/app/ui/pages/auth/set-password/set-password.component.htmlprojects/social_platform/src/app/ui/pages/courses/courses.component.htmlprojects/social_platform/src/app/ui/pages/courses/lesson/shared/radio-select-task/radio-select-task.component.htmlprojects/social_platform/src/app/ui/pages/courses/list/course/course.component.htmlprojects/social_platform/src/app/ui/pages/courses/list/list.component.htmlprojects/social_platform/src/app/ui/pages/feed/feed.component.htmlprojects/social_platform/src/app/ui/pages/members/member-card/member-card.component.htmlprojects/social_platform/src/app/ui/pages/members/member-filters-dialog/member-filters-dialog.component.htmlprojects/social_platform/src/app/ui/pages/members/members-filters/members-filters.component.htmlprojects/social_platform/src/app/ui/pages/members/members.component.htmlprojects/social_platform/src/app/ui/pages/office/nav/nav.component.htmlprojects/social_platform/src/app/ui/pages/onboarding/stage-zero/stage-zero.component.htmlprojects/social_platform/src/app/ui/pages/profile/edit/edit.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/analytics/analytics.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/analytics/drilldown/analytics-drilldown.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/list/list.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/list/program-projects-filter/program-projects-filter.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/list/rating-card/project-rating/components/boolean-criterion/boolean-criterion.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/list/rating-card/project-rating/components/range-criterion-input/range-criterion-input.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/list/rating-card/project-rating/project-rating.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/main/role-widget/program-role-widget.component.htmlprojects/social_platform/src/app/ui/pages/program/detail/register/register.component.htmlprojects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.htmlprojects/social_platform/src/app/ui/pages/program/program.component.htmlprojects/social_platform/src/app/ui/pages/projects/bar-new/bar.component.htmlprojects/social_platform/src/app/ui/pages/projects/detail/info/components/projects-mid-side/projects-mid-side.component.htmlprojects/social_platform/src/app/ui/pages/projects/detail/kanban/components/cancel-task-form/cancel-task-form.component.htmlprojects/social_platform/src/app/ui/pages/projects/detail/kanban/components/create-board-form/create-board-form.component.htmlprojects/social_platform/src/app/ui/pages/projects/detail/kanban/components/create-tag-form/create-tag-form.component.htmlprojects/social_platform/src/app/ui/pages/projects/detail/kanban/components/task/detail/task-detail.component.htmlprojects/social_platform/src/app/ui/pages/projects/detail/kanban/pages/archive/kanban-archive.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/components/project-achievement-step/project-achievement-step.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/components/project-additional-step/project-additional-step.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/components/project-navigation/project-navigation.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/components/project-team-step/collaborator-card/collaborator-card.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/components/project-team-step/invite-card/invite-card.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/components/project-team-step/project-team-step.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/components/project-vacancy-step/project-vacancy-step.component.htmlprojects/social_platform/src/app/ui/pages/projects/edit/edit.component.htmlprojects/social_platform/src/app/ui/pages/projects/list/list.component.htmlprojects/social_platform/src/app/ui/pages/projects/projects.component.htmlprojects/social_platform/src/app/ui/pages/vacancies/detail/info/components/vacancy-responses/vacancy-responses.component.htmlprojects/social_platform/src/app/ui/pages/vacancies/detail/info/info.component.htmlprojects/social_platform/src/app/ui/pages/vacancies/list/list.component.htmlprojects/social_platform/src/app/ui/pages/vacancies/vacancies.component.htmlprojects/social_platform/src/app/ui/primitives/bar/bar.component.htmlprojects/social_platform/src/app/ui/primitives/checkbox/checkbox.component.htmlprojects/social_platform/src/app/ui/primitives/input/input.component.htmlprojects/social_platform/src/app/ui/primitives/modal/modal.component.htmlprojects/social_platform/src/app/ui/primitives/select/select.component.htmlprojects/social_platform/src/app/ui/primitives/upload-file/upload-file.component.htmlprojects/social_platform/src/app/ui/widgets/chat-window/chat-window.component.htmlprojects/social_platform/src/app/ui/widgets/detail/detail.component.htmlprojects/social_platform/src/app/ui/widgets/feed-filter/feed-filter.component.htmlprojects/social_platform/src/app/ui/widgets/info-card/info-card.component.htmlprojects/social_platform/src/app/ui/widgets/message-input/message-input.component.htmlprojects/social_platform/src/app/ui/widgets/news-card/carousel/carousel.component.htmlprojects/social_platform/src/app/ui/widgets/news-card/feed-news-modal/feed-news-modal.component.htmlprojects/social_platform/src/app/ui/widgets/news-card/feed-news-preview/feed-news-preview.component.htmlprojects/social_platform/src/app/ui/widgets/news-form/news-form.component.htmlprojects/social_platform/src/app/ui/widgets/project-invite/profile-project-invite-modal.component.htmlprojects/social_platform/src/app/ui/widgets/project-invite/project-invite-dialog.component.htmlprojects/social_platform/src/app/ui/widgets/project-invite/project-invite-role-input.component.htmlprojects/social_platform/src/app/ui/widgets/project-invite/project-member-invite-modal.component.htmlprojects/social_platform/src/app/ui/widgets/project-vacancy-card/project-vacancy-card.component.htmlprojects/social_platform/src/app/ui/widgets/projects-filter/projects-filter.component.htmlprojects/social_platform/src/app/ui/widgets/region-select/region-select.component.htmlprojects/social_platform/src/app/ui/widgets/skills-basket/skills-basket.component.htmlprojects/social_platform/src/app/ui/widgets/vacancy-card/vacancy-card.component.htmlprojects/social_platform/src/app/ui/widgets/vacancy-created-dialog/vacancy-created-dialog.component.htmlprojects/social_platform/src/app/ui/widgets/vacancy-filter/vacancy-filter.component.htmlprojects/ui/src/lib/components/primitives/avatar/avatar.component.htmlprojects/ui/src/lib/components/primitives/back/back.component.htmlprojects/ui/src/lib/components/primitives/button/button.component.htmlprojects/ui/src/lib/components/primitives/icon/icon.component.htmlprojects/ui/src/lib/components/primitives/loader/loader.component.htmlИзменённые shared-компоненты и адаптеры: 59 исходников
Список включает канонические компоненты, compatibility reexports, общие form controls и переиспользуемые widgets. Для компонентов, изменённых только в HTML/SCSS, указан соответствующий TS-источник. В
ui-adapters.directive.tsнаходятся Card, Field, Choice, Table, FormLayout, Filters, DialogBody, DialogFooter, Drawer и Alert. Foundations:_ui-tokens.scss,_ui-foundation.scss,_ui-system.scss,_typography.scss.projects/social_platform/src/app/ui/primitives/autocomplete-input/autocomplete-input.component.tsprojects/social_platform/src/app/ui/primitives/avatar-control/avatar-control.component.tsprojects/social_platform/src/app/ui/primitives/avatar/avatar.component.tsprojects/social_platform/src/app/ui/primitives/bar/bar.component.tsprojects/social_platform/src/app/ui/primitives/button/button.component.tsprojects/social_platform/src/app/ui/primitives/checkbox/checkbox.component.tsprojects/social_platform/src/app/ui/primitives/dropdown/dropdown.component.tsprojects/social_platform/src/app/ui/primitives/icon/icon.component.tsprojects/social_platform/src/app/ui/primitives/input/input.component.tsprojects/social_platform/src/app/ui/primitives/loader/loader.component.tsprojects/social_platform/src/app/ui/primitives/modal/modal.component.tsprojects/social_platform/src/app/ui/primitives/search/search.component.tsprojects/social_platform/src/app/ui/primitives/select/select.component.tsprojects/social_platform/src/app/ui/primitives/tag/tag.component.tsprojects/social_platform/src/app/ui/primitives/textarea/textarea.component.tsprojects/social_platform/src/app/ui/primitives/tooltip/tooltip.component.tsprojects/social_platform/src/app/ui/primitives/upload-file/upload-file.component.tsprojects/social_platform/src/app/ui/widgets/chat-window/chat-message/chat-message.component.tsprojects/social_platform/src/app/ui/widgets/chat-window/chat-window.component.tsprojects/social_platform/src/app/ui/widgets/detail/detail.component.tsprojects/social_platform/src/app/ui/widgets/feed-filter/feed-filter.component.tsprojects/social_platform/src/app/ui/widgets/header/header.component.tsprojects/social_platform/src/app/ui/widgets/info-card/info-card.component.tsprojects/social_platform/src/app/ui/widgets/message-input/message-input.component.tsprojects/social_platform/src/app/ui/widgets/news-card/carousel/carousel.component.tsprojects/social_platform/src/app/ui/widgets/news-card/feed-news-modal/feed-news-modal.component.tsprojects/social_platform/src/app/ui/widgets/news-card/feed-news-preview/feed-news-preview.component.tsprojects/social_platform/src/app/ui/widgets/news-card/news-card.component.tsprojects/social_platform/src/app/ui/widgets/news-form/news-form.component.tsprojects/social_platform/src/app/ui/widgets/project-invite/profile-project-invite-modal.component.tsprojects/social_platform/src/app/ui/widgets/project-invite/project-invite-dialog.component.tsprojects/social_platform/src/app/ui/widgets/project-invite/project-invite-role-input.component.tsprojects/social_platform/src/app/ui/widgets/project-invite/project-member-invite-modal.component.tsprojects/social_platform/src/app/ui/widgets/project-navigation/project-navigation.component.tsprojects/social_platform/src/app/ui/widgets/project-vacancy-card/project-vacancy-card.component.tsprojects/social_platform/src/app/ui/widgets/projects-filter/projects-filter.component.tsprojects/social_platform/src/app/ui/widgets/region-select/region-select.component.tsprojects/social_platform/src/app/ui/widgets/skills-basket/skills-basket.component.tsprojects/social_platform/src/app/ui/widgets/skills-group/skills-group.component.tsprojects/social_platform/src/app/ui/widgets/specializations-group/specializations-group.component.tsprojects/social_platform/src/app/ui/widgets/vacancy-card/vacancy-card.component.tsprojects/social_platform/src/app/ui/widgets/vacancy-created-dialog/vacancy-created-dialog.component.tsprojects/social_platform/src/app/ui/widgets/vacancy-filter/vacancy-filter.component.tsprojects/social_platform/src/app/ui/widgets/vacancy-letter/vacancy-letter.component.tsprojects/social_platform/src/app/ui/widgets/vacancy-skills/vacancy-skills.component.tsprojects/social_platform/src/app/ui/widgets/vacancy-status/vacancy-status.component.tsprojects/ui/src/lib/components/layout/dialog-header/dialog-header.component.tsprojects/ui/src/lib/components/layout/page-header/page-header.component.tsprojects/ui/src/lib/components/layout/state/state.component.tsprojects/ui/src/lib/components/layout/ui-adapters.directive.tsprojects/ui/src/lib/components/primitives/avatar/avatar.component.tsprojects/ui/src/lib/components/primitives/back/back.component.tsprojects/ui/src/lib/components/primitives/badge/badge.component.tsprojects/ui/src/lib/components/primitives/button/button.component.tsprojects/ui/src/lib/components/primitives/button/button.directive.tsprojects/ui/src/lib/components/primitives/icon/icon.component.tsprojects/ui/src/lib/components/primitives/loader/loader.component.tsprojects/ui/src/lib/components/primitives/pagination/pagination.component.tsprojects/ui/src/lib/components/primitives/tabs/tabs.component.tsГраница бизнес-логики
Унификация UI Kit сохраняет бизнес-правила: не меняет API/DTO, доменные use cases, permissions, router declarations и обработчики отправки форм. Сравнение
bc4940c5..74a94c9b: 284 UI-файла, 0 изменений защищённых слоёв. Сравнение AST существующих методов выявило 7 UI-классов; изменения вручную проверены как keyboard/disabled guards, делегирование прежних events и удаление дублирующих presentation-классов. Данные проверки: business-boundary.json. Финальный CSS-fix auth влияет только на desktop-отступ регистрации.Весь PR также содержит предыдущий responsive-коммит с двумя явно раскрытыми правками инициализации onboarding:
onboarding-stage-zero-info.service.tsзагружает профиль перед инициализацией, сохраняя draft;onboarding-stage-one-ui-info.service.tsиспользуетemitEvent: falseпри заполнении формы. Это исполняемая логика инициализации, поэтому утверждение «во всём PR нет изменений вне presentation» было бы неточным. Контракты, правила валидации, права и бизнес-действия сохранены; обе правки покрыты regression tests.Страницы
Проверки
build:pr) после финального CSS-fix — успешно. CI-equivalent Prettier — 0 нарушений; на Windows учтены checkout CRLF и локальный ignored dist.Проверка после merge
По запросу пользователя после merge #401 в dev требуется smoke-test на реальных iOS Safari и Android Chrome на dev-стенде, перед prod. Сейчас этот пункт не выполнен: доступ к устройствам/облачному сервису, точный frontend URL и тестовый аккаунт не предоставлены. Чек-лист и форма результата. Найденные после merge проблемы исправляются отдельными PR в dev. До успешного физического smoke-test унификация не считается полностью закрытой.
Скриншоты
Лента: до/после
Проекты: до/после
Вакансии: до/после
Программы: до/после
Курсы: до/после
Участники: до/после
Профиль: до/после
Редактирование профиля: до/после
Известные ограничения
Browser QA выполнена в Chrome с синтетическими API fixtures: записи в реальный backend, письма, WebSocket и права конкретного аккаунта не проверялись. Физические Safari iOS/Chrome Android, клавиатура и системные pickers требуют проверки на устройствах. Некоторые внешние изображения fixtures недоступны на обеих версиях. В build остаются прежние Sass/CommonJS/budget warnings. Канбан остаётся отключён существующими маршрутами; адаптеры проверены сборкой/unit suite. Специальный контент карточек, графиков и заданий сохраняет доменные layouts поверх общего UI Kit.
Результат merge и dev-deploy — 2026-10-04
PR #401 смержен в dev:
ec57fa7cadb8ca7acef6859380a966a837783495.Deploy to dev-stage — success: штатные Linux format:check, ESLint, 2006 тестов / 406 файлов, build:pr и rsync deploy успешно завершены.
После merge локальная development-сборка того же SHA прошла ещё 36 проверок геометрии на 320/390/1440 px. Проверена совместимость с соседними PR #399/#400: карточки проектов с длинным названием программы и статусом «Сдан в программу», CTA внутри карточки и не меньше 44 px. Это fixture Chrome QA, а не физический smoke на dev-стенде.
Реальные iOS Safari / Android Chrome: не выполнено. Доступ к физическим устройствам или облачному сервису устройств, точный frontend URL dev-стенда и тестовый аккаунт не предоставлены. Чек-лист выше остаётся открытым; перед prod требуется фактический passed на обоих устройствах. Проблемы, найденные после merge, исправлять отдельными PR в dev.